home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / bin / apt-mark < prev    next >
Encoding:
Text File  |  2011-04-15  |  3.3 KB  |  102 lines

  1. #!/usr/bin/python
  2.  
  3. from optparse import OptionParser
  4.  
  5. import sys
  6. import os.path
  7.     
  8. try:
  9.     import apt_pkg
  10. except ImportError:
  11.     print >> sys.stderr, "Error importing apt_pkg, is python-apt installed?"
  12.     sys.exit(1)
  13.     
  14. actions = { "markauto" : 1,
  15.             "unmarkauto": 0
  16.           }
  17.  
  18. def show_automatic(filename):
  19.     if not os.path.exists(STATE_FILE):
  20.         return
  21.     auto = set()
  22.     tagfile = apt_pkg.TagFile(open(STATE_FILE))
  23.     for section in tagfile:
  24.         pkgname = section.get("Package")
  25.         autoInst = section.get("Auto-Installed")
  26.         if int(autoInst):
  27.             auto.add(pkgname)
  28.     print "\n".join(sorted(auto))
  29.     
  30.  
  31. def mark_unmark_automatic(filename, action, pkgs):
  32.     " mark or unmark automatic flag"
  33.     # open the statefile
  34.     if os.path.exists(STATE_FILE):
  35.         try:
  36.             tagfile = apt_pkg.TagFile(open(STATE_FILE))
  37.             outfile = open(STATE_FILE+".tmp","w")
  38.         except IOError, msg:
  39.             print "%s, are you root?" % (msg)
  40.             sys.exit(1)
  41.         for section in tagfile:
  42.             pkgname = section.get("Package")
  43.             autoInst = section.get("Auto-Installed")
  44.             if pkgname in pkgs:
  45.                 if options.verbose:
  46.                     print "changing %s to %s" % (pkgname,action)
  47.                 newsec = apt_pkg.rewrite_section(section,
  48.                                        [],
  49.                                        [ ("Auto-Installed",str(action)) ])
  50.                 pkgs.remove(pkgname)
  51.                 outfile.write(newsec+"\n")
  52.             else:
  53.                 outfile.write(str(section)+"\n")
  54.         if action == 1:
  55.             for pkgname in pkgs:
  56.                 if options.verbose:
  57.                     print "changing %s to %s" % (pkgname,action)
  58.                 outfile.write("Package: %s\nAuto-Installed: %d\n\n" % (pkgname, action))
  59.         # all done, rename the tmpfile
  60.         os.chmod(outfile.name, 0644)
  61.         os.rename(outfile.name, STATE_FILE)
  62.         os.chmod(STATE_FILE, 0644)
  63.  
  64.  
  65. if __name__ == "__main__":
  66.     apt_pkg.init()
  67.  
  68.     # option parsing
  69.     parser = OptionParser()
  70.     parser.usage = "%prog [options] {markauto|unmarkauto} packages..."
  71.     parser.epilog = "apt-mark is deprecated, use apt-get markauto/unmarkauto."
  72.     parser.add_option("-f", "--file", action="store", type="string",
  73.                       dest="filename",
  74.                       help="read/write a different file")
  75.     parser.add_option("-v", "--verbose",
  76.                       action="store_true", dest="verbose", default=False,
  77.                       help="print verbose status messages to stdout")
  78.     (options, args) = parser.parse_args()
  79.  
  80.     if not args:
  81.         parser.print_help()
  82.         sys.exit(1)
  83.  
  84.     # get the state-file
  85.     if not options.filename:
  86.         STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
  87.     else:
  88.         STATE_FILE=options.filename
  89.  
  90.     if len(args) == 0:
  91.         parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'")
  92.  
  93.     if args[0] == "showauto":
  94.         show_automatic(STATE_FILE)
  95.     else:
  96.         # get pkgs to change
  97.         if args[0] not in actions.keys():
  98.             parser.error("first argument must be 'markauto', 'unmarkauto' or 'showauto'")
  99.         pkgs = args[1:]
  100.         action = actions[args[0]]
  101.         mark_unmark_automatic(STATE_FILE, action, pkgs)
  102.